import pickle, base64

from django_redis import get_redis_connection


def merge_cart_cookie_to_redis(request, user, response):
    # １获取cookie数据
    data = request.COOKIES.get('cart_cookie', None)
    # 　２判断cookie数据
    # 没有cookie数据直接返回
    if not data:
        return response
    # 3 获取解密后的数据
    cart_dict = pickle.loads(base64.b64decode(data))
    # 判断是否是空字典
    if not cart_dict:
        return response

    '''
        10:{
            count: 5,
            selected: True
        },
        11:{
            count: 6,
            selected: False
        }
    '''

    # 提取字典数据,转为redis存储形式
    # python中的字典对应redis中的hash数据
    cart = {}  # 保存sku_id 和 count {10:5}
    # python中的列表对应redis中的集合
    cart_list = []  # 保存选中状态的sku_id
    cart_list_no = []  # 保存未选中状态的sku_id
    for sku_id, data_dict in cart_dict.items():
        cart[sku_id] = data_dict['count']
        # 判断选中状态
        if data_dict['selected']:
            cart_list.append(sku_id)
        else:
            cart_list_no.append(sku_id)
    # redis数据保存
    conn = get_redis_connection('cart')
    # 写入hash数据
    conn.hmset('cart_%s' % user.id, cart)
    # 写入集合
    if cart_list:
        conn.sadd('cart_select_%s' % user.id, *cart_list)
    if cart_list_no:
        conn.srem('cart_select_%s' % user.id, *cart_list_no)
    # 　删除ｃｏｏｋｉｅ数据
    response.delete_cookie('cart_cookie')

    # 结果返回
    return response